小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体 | 您所在的位置:网站首页 › ros 视觉检测 › 小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体 |
ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体
目录总览一,项目代码下载二,ros下实现darknet_ros(YOLO V3)检测2.1 编译整个项目2.2 下载模型2.3运行代码
三,在gazebo中搭建小车及摄像头3.1 最终结果预览3.2 搭建小车的模型3.2.1xacro声明及常量定义3.2.2 惯性矩阵3.2.3 xacro零部件定义3.2.4 传动系统3.2.5 添加Gazebo控制器插件
3.3,小车摄像头3.4 小车和摄像头拼接3.5 launch文件3.5.1代码3.5.2 运行launch3.5.3 使用rqt查看摄像头内容3.5.4 小车摄像头与yolo对接方法
四,加载YOLO,让小车通过darknet_ros识别检测标记物体五,键盘控制小车的移动
目录总览
小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体 小车yolo机械臂(二)机械臂仿真 ros下从xacro模型文件搭建Moveit!+Gazebo仿真系统 小车yolo机械臂(三)ROS消息订阅监听 rospy.Subscriber 订阅监听yolo python实现订阅/darknet_ros/bounding_boxes topic 小车yolo机械臂(四)python ros 和darknet_ros 使用launch文件启动脚本 小车yolo机械臂(五)让小车在命令下运动起来 rostopic pub /cmd_vel geometry_msgs/Twist 小车yolo机械臂(六)ros gazebo 小车摄像头根据darknet_ros中yolo目标检测的信息进行自主运动 小车yolo机械臂(七)小车与机械臂融合,并控制机械臂运动 gazebo control 小车yolo机械臂(八)ros小车和机械臂gazebo仿真,机械臂根据darknet_ros中yolo检测结果来自动运动 python实现 一,项目代码下载需要用到的代码我已经上传到github上面,有两个包,第一个是darknet_ros(用于yolo的目标检测),第二个是mrobot_gazebo(在ros下小车的仿真)。 下载地址:github项目 我们先看看整体的一个目录架构: 首先,我们先实现ROS下darknet_ros(YOLO V3)检测。 参考博客:ROS下实现darknet_ros(YOLO V3)检测 2.1 编译整个项目在github讲darknet_ros下载在src目录后,在ROS工作空间目录下打开终端 此时会开始编译整个项目,编译完成后会检查{catkin_ws}/darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。 如果刚好你之前已经下载好了模型文件,那就好了,在开始编译之前就把模型文件拷贝到上述文件夹下,就不会再次下载了。 2.2 下载模型建议提前下载模型文件: 下载链接: https://pjreddie.com/media/files/yolov2.weights https://pjreddie.com/media/files/yolov2-tiny.weights https://pjreddie.com/media/files/yolov3.weights https://pjreddie.com/media/files/yolov3-tiny.weights 其它方法的参考博客: 关于yolov3.weights文件下载地址的分享 2.3运行代码 图像话题发布 因为darknet_ros会直接订阅指定的图像话题名,然后对图像进行检测,绘制检测框,并发布相应的检测话题,因此首先需要找一个能够发布图像话题的ROS包,这里推荐使用ROS官方提供的usb_cam驱动包,可以直接将电脑自带摄像头或连接电脑的USB摄像头采集的图像发布为ROS图像话题。 下载摄像头驱动: sudo apt-get install ros-kinetic-usb-cam然后发布摄像头图像话题: roslaunch usb_cam usb_cam-test.launch如果顺利的话应该可以看到实际的图像显示界面。
这里的topic: /usb_cam/image_raw是ros的电脑前置摄像头的topic,通过这个topic,yolo就可以拿到前置摄像头的图像。 回到darknet的工作空间根目录,执行: source devel/setup.bash roslaunch darknet_ros darknet_ros.launch注意,在运行上面的命令时,roslaunch usb_cam usb_cam-test.launch这个命令也是在运行的哦。
接下来,我们就将在gazebo中搭建小车及摄像头。 先看看最终效果: 现在catkin_ws/src目录下打开终端,执行命令: roslaunch mrobot_gazebo my_gazebo3.launch可以看到: 先搭建小车的模型:my_gazebo_robot_car.urdf.xacro 该模型是采用xcrao,是优化后的URDF模型,是一种精简化、可复用、模块化的描述形式。 3.2.1xacro声明及常量定义xacro是URDF的升级版,模型文件的后缀名由.urdf变为.xacro,而 且在模型标签中需要加入xacro的声明: 定义所需要的颜色,小车身上的颜色: 常量定义 这里是对圆周率的pi进行定义: 这一部分是对小车身上的零部件的常量定义 3.2.2 惯性矩阵接下来就是惯性矩阵,这个知识点数学难度很高,建议知道结果就行,想要深入了解,有一篇博客和一套视频可以去观看: 这篇博客是在结果上的总结:机器人的惯性、视觉、碰撞特征计算与表示 这个是b站上的系统课程,看完后会对惯性矩阵有原理性的认识:理论力学 下面三个惯性矩阵的定义,其中包含球体惯性矩阵,立方体惯性矩阵,圆柱体惯性矩阵 对这些惯性矩阵的使用如下: 3.2.3 xacro零部件定义接下来是对小车每个零部件的宏定义(就不一一罗列了) Gazebo/Black transmission_interface/SimpleTransmission VelocityJointInterface 1注意,上面的代码中出现了: Gazebo/Black这个是对小车颜色的再定义,因为在gazebo仿真中,小车的颜色只能通过该定义来完成,这是rviz和gazebo不兼容的一个地方,需要注意。 3.2.4 传动系统传动系统(Transmission)可以将机器人的关节指令转换成执行器的控制信号。机器人每个需要运动的关节都需要配置相应的传动系统,可以在机器人的URDF模型文件中按照以下方法配置: transmission_interface/SimpleTransmission VelocityJointInterface 1 3.2.5 添加Gazebo控制器插件Gazebo插件可以根据插件的作用范围应用到URDF模型的、、上,需要使用标签作为封装。 (1)为元素添加插件 为元素添加Gazebo插件的方式如下: ... plugin parameters ...与其他的元素相同,如果元素中没有设置reference="x"属性,则默认应用于标签。 (2)为、标签添加插件 如果需要为、标签添加插件,则需要设置标签中的reference="x"属性: ... plugin parameters ...至于Gazebo目前支持的插件种类,可以查看ROS默认安装路径下的/opt/ros/kinetic/lib文件夹,所有插件都是以libgazeboXXX.so的形式命名的。 Gazebo已经提供了一个用于差速控制的插件 libgazebo_ros_diff_drive.so,可以将其应用到现有的机器人模型上。在mrobot_gazebo/urdf/mrobot_body.urdf.xacro文件中添加如下插件声明(即小车的插件): Debug true / 1 true true 100.0 true base_to_wheel_left_joint base_to_wheel_right_joint ${base_link_radius*2} ${2*wheel_radius} 1 30 1.8 cmd_vel odom odom base_footprint在加载差速控制器插件的过程中,需要配置一系列参数,其中比较关键的参数如下。 :机器人的命名空间,插件所有数据的发布、订阅都在该命名空间下。 和:左右轮转动的关节joint,控制器插件最终需要控制这两个joint转动。 和:这是机器人模型的相关尺 寸,在计算差速参数时需要用到。 :车轮转动的加速度。 :控制器订阅的速度控制指令,ROS中一般都命名为cmd_vel,生成全局命名时需要结合中设置的命名空间。 :里程计数据的参考坐标系,ROS中一般都命名为odom。 3.3,小车摄像头小车模型搭建好了,下一个就是为小车添加一个摄像头,文件中的模型为:camera.xacro 为摄像头模型添加Gazebo插件 类似于小车模型中的差速控制器插件,传感器的Gazebo插件也需要在URDF模型中配置。 在camera.xacro的相关标签有两个,一个是颜色,一个是摄像头插件。 颜色代码如下: Gazebo/Black这个颜色相关的标签用来设置摄像头模型在Gazebo中的material, 与小车模型的配置相似,只需要设置颜色参数。 摄像头插件代码如下: 30.0 1.3962634 1280 720 R8G8B8 0.02 300 gaussian 0.0 0.007 true 0.0 /camera image_raw camera_info camera_link 0.07 0.0 0.0 0.0 0.0 0.0重点是这个第二个设置摄像头插件的标签。在加载传感器插件时,需要使用标签来包含传感器的各种属性。例如现在使用的是摄像头传感器,需要设置type为camera,传感器的命名(name)可以自由设置;然后使用标签具体描述摄像头的参数,包括分辨率、编码格式、图像范围、噪音参数等;最后需要使用标签加载摄像头的插件libgazebo_ros_camera.so,同时设置插件的参数,包括命名空间、发布图像的话题、参考坐标系等。 3.4 小车和摄像头拼接现在我们已经有了两个模型,一个是小车,一个是摄像头,现在讲两者组合在一起。 文件:my_gazebo_robot_All.urdf.xacro 就是将小车和摄像头组合在一起,代码如下: 3.5 launch文件 3.5.1代码最后我们写一个launch文件,名为:my_gazebo3.launch \ 3.5.2 运行launch在目录catkin_ws/src处启动终端,输入命令: roslaunch mrobot_gazebo my_gazebo3.launchgazebo仿真出现,可以看到下面的结果: 接着,我们使用rqt工具查看当前小车眼前的世界: rqt_image_view有个地方需要注意,rqt工具中,我们可以看到 改为: subscribers: camera_reading: topic: /camera/image_raw queue_size: 1 四,加载YOLO,让小车通过darknet_ros识别检测标记物体加载YOLO,让小车通过darknet_ros识别检测标记物体 在将darknet_ros/config/ros.yaml中的camera_reading:的topic改为 /camera/image_raw后,我们直接启动yolo: roslaunch darknet_ros darknet_ros.launch检测小车摄像头看到的物体是什么 小车模型中已经加入了libgazebo_ros_diff_drive.so插件,可以使用差速控制器实现机器人运动。查看系统当前的话题列表 第一次执行一般会遇到这样的问题: ERROR: cannot launch node of type [mrobot_teleop/mrobot_teleop.py]: can’t locate node [mrobot_teleop.py] in package [mrobot_teleop] No processes to monitor shutting down processing monitor… … shutting down processing monitor complete 问题原因 mrobot_teleop/mrobot_teleop.py文件没有执行权限 解决方法: chmod +x mrobot_teleop.py 重新运行: roslaunch mrobot_teleop mrobot_teleop.launch |
CopyRight 2018-2019 实验室设备网 版权所有 |